var time_utils_dateRegex = /(?=(YYYY|YY|MM|DD|HH|mm|ss|ms))\1([:\/]*)/g;
var time_utils_timespan = {
  YYYY: ["getFullYear", 4],
  YY: ["getFullYear", 2],
  MM: ["getMonth", 2, 1], // getMonth is zero-based, thus the extra increment field
  DD: ["getDate", 2],
  HH: ["getHours", 2],
  mm: ["getMinutes", 2],
  ss: ["getSeconds", 2],
  ms: ["getMilliseconds", 3],
};
var time_utils = {};

time_utils.str = function (str, date, utc) {
  if (typeof str !== "string") {
    date = str;
    str = "YYYY-MM-DD";
  }

  if (!date) date = new Date();
  return str.replace(time_utils_dateRegex, function (match, key, rest) {
    var args = time_utils_timespan[key];
    var name = args[0];
    var chars = args[1];
    if (utc === true) name = "getUTC" + name.slice(3);
    var val = "00" + String(date[name]() + (args[2] || 0));
    return val.slice(-chars) + (rest || "");
  });
};

time_utils.utc = function (str, date) {
  return time_utils(str, date, true);
};

module.exports = time_utils;
